S100 Computers

Home S-100 Boards History New Boards Software Boards For Sale
Forum Other Web Sites Quiz Index    
  
The Master CPU Board - The Intersystem Z80 Series-II CPU Board
  
Every serious manufacture had their own CPU card. Many had a number of them.  While almost everybody started off with Altair or IMSAI cards. These cards rapidly got replaced by faster better cards with more functionality on the card.  The early TDL Z80 card was a great early improvement.  In my early days I always liked the SD Systems Z80 Card. It was as solid as a rock. Easily going past the 4 MHz specs. Another rock solid CPU card was the Cromemco ZPU card. Soon people really appreciated having an onboard ROM containing basic code to input/output to ports and memory etc. A so called "Monitor" program.  Again the one by TDL in their System Monitor Board (SMB board), was hard to beat. It was called a "Zapple" monitor.   Throughout my S-100 years, this monitor has saved my neck many times. I  describe the code in more detail here and provide source code for my modified version. Anyway the Zapple monitor resided in ROM (2708) at 0xF000 to 0xFFFF in memory.  If you had a CPU card with this ROM on board, some low memory, an I/O card and a video board you had the makings of a primitive but functional  S-100 system.   That is what we will start with here.
  
For my system I will use a later model CPU card , the Ithaca Intersystems Series-II CPU II card. Not only does this card had an on board ROM but more importantly it was IEEE-696 compatible. It had 24 bit data addressing capabilities and (not used by me) an AMD 9519 Interrupt controller. Other similar systems existed. Those of Godbout, Morrow, and Cromemco being the best known.  However such cards are not all that common since they came in towards the end of the S-100 era.  I had to make some changes on my card to get it to work in 8 and 16 bit systems. I will outline them as I progress. This schematic shows the final layout.  Through this write-up I will call this card the IA-Z80 card.

IA Series II  Z80 Board

Extended Addressing with the IA-Z80 Card
One very unique feature of this Z80 card -- and the reason I like it so much --  is that the card has the ability for the Z80 CPU to adderss RAM addresses greater than 64K.   This is done by a simple trick of using IC's 15,18 & 19 (74LS157's) to latch/translate addresses A12 to A19 before each RAM read or write signal.

This address translator" is configured as an 8K "window" in the normal Z80 64K address space. The location of the window (actually two 4K windows, see below) is set by on board jumpers (JC 1-6). To address this translation window function you output a byte to an on board port set with jumper JB (1-6).  I use port D2H for the lower 4K window, and D3H for the next higher 4K window.  On reset, the window is set to 0K and 4K and so overlaps with normal RAM. So the window is transparent to the system. By outputting values to ports D2H and D3H you can map these windows anywhere in a 1MG address space.   Useful, but only 4K or 8K blocks!  For a CPM3 system to be practical in its bank select mode it would really be nice to have 16K windows. A friend of mine Geoff Shapiro back in the 80's noticed that the board could be easily modified to allow a 16K/32K window.  What we do is alter some of the address lines going into the 74LS157's. I will describe this in detail as it really makes the board ideally suited to running CPM3 in banked mode.  You can probably do this by bending up pins and wire wrapping them. Since I regard it as permanent in my system I cut board traces.

Cut the board traces to pins 3 & 5 of U2. Connect the pins to ground. 
Cut the board trace to pin 1 of U15 and connect the pin to A14 of the Z80 (pin 4, find a nearby trace).  
Note the trace from pin 1 of U15 starts out under the IC socket and travels across the space between it and the socket for U16. To cut it you can (in some cases) lift the socket and see it or with a ohm/conductivity meter on pin 1 scratch the tarce traveling across to under socket U16. It is the top most trace between the two sockets under the "U" of U15 on the silk screen.
Cut the trace connecting pin 3 of U18 to pin 3 of U19.
Cut the board trace to pin 6 of U31 and pins 4 and 5 of U33 and connect the pin to the (now free) three pins together.
Connect these three pins to A14 of the Z80 (pin 4, find a nearby trace).  
Cut the board trace to pins 4,5,11 and 12  of U19.  Connect pins 11 and 12 to pin 13 of U19. 
Connect pins 4 and 5 to pin 3 of U19.
Jumper JC-2,3,4,5 and 6 th all B-C.

The schematic with these modifications is shown below. See here for the IA-Series II original schematic.

IA-Series II Modifications

The effective schematic of these changes can be seen here.

You now have 16K window capability. Let me explain:-

Suppose you wish to address RAM at 000F8000H to 000FFFFFH (the top 16K of the 1MG address space of the 8086). With these modifications you output to port D2H (in my case), 0F8H  and you output to port D3H, 0FCH.  Now when you display 0,7FFF you will actually see 000F8000H to 000FFFFFH.  The two back to back 16K windows translate the 16 bit address lines into 20 bit address lines. This makes writing CPM3 to address >64K RAM space very easy and efficient.  Remember to reset the windows back when done (or hit reset).  The relevance of this is that it allows you to see the ROM code you may have for a 8086/80286 in high memory with a Z80.  As I will describe when I talk about my S100 80286 board, I can put in RAM with my Z80 monitor at the 8086/80286 CPU reset address (000FFFF0H) the following code the test code:-

 B0,33,E6,01,EB,FA

This will output to may SD Systems Video board (port 01H) the letter "3" continuously on my LCD/CRT after the 8086/80286 starts --  when it gets control of the bus for the first time. A simple basic test for the board.

This is how we do this. With the above modifications to the board, using the monitor we switch the Z80 window of the 8K block of RAM from 0000H - 3FFFH to FC000H - FFFFFH,  (assuming you have a 24 address bit RAM board in the top 1 MG of RAM).  We do this by
QO D2,FC

Then we deposit the above 6 bytes in RAM at 3FF0H in RAM

S,3FF0,B0
S,3FF1,33
S,3FF2,E6
S,3FF3,E6
S,3FF4,01
S,3FF5,EB
S,3FF6,FA

Then if you activate your 8086 or 80286, it will find the code there on reset.
We could just as easily entered
QO D3,FC
and
S,7FF0,B0
S,7FF1,33  etc.

Here are some more examples to explain the translation system

S100 Address lines
A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
  7   6   5        2                             
Port 0D2H

Examples:-
Address 0000 0000H + Port D2H = FCH         translates to an address of 000F C000 0000H
Address 0000 0000H + Port D2H = 10H         translates to an address of 0001 0000 0000H
Address 0000 0000H + Port D2H = 14H         translates to an address of 0001 4000 0000H
Address 0000 1000H + Port D2H = 14H         translates to an address of 0001 4000 1000H

Disabling the Onboard PROM of a IA-Z80 Card
The second modification I made to this board was to allow the disabling of the on-board EPROM under software control. Without this the EPROM will appear in each 64K segment of memory. In may case at 0F000H-0FFFFH, 1F000H-1FFFFH, 2F000H-2FFFFH.... Particularly useful is the ability to remove the EPROM from the first 64K of RAM allowing a 64K CPM3 system.
 
To accomplish this we take advantage of the fact that the above 16K window mapping frees up bits 0 and 1 of ports D2H and D3H (or whatever address you have yours jumpered to by Jumper JB).  If we cut the board trace of pin 14 of U1 (going to jumper JB of (A-B-C) and connect a wire from pin 14 of U1 to pin 19 of U17 (data line 0) we can disable the EPROM anytime we output to port D2 (or D3) with bit 1 equal to 1. So in our example above if we output to D2H 0F9H we will relocate the RAM window and remove the EPROM addressability from the board. Note you cannot do this from your monitor in ROM because you will have removed the next op-code the Z80 would receive.
To test, recompile the Z80 monitor to say 8000H, load it with ZSID, jump  to 8000H and then output to the D2H port.

16 Bit Port Addressing
The current Z80-Series II  board outputs all I/O port address on the high (A8-A15) and low 8 bit (A0-A7) address lines.  Most early S-100 Z80 boards did this to be compatible with the original 8080 CPU which did the same thing.  Actually few if any S-100 I/O boards utilized these high bits. Because all 8 bit CPU's had a maximum of only 256 ports this was never a problem.

With the introduction of 16 bit systems and the I/O port range now extended to 64,000 ports (i.e. 16 bits), it became relevant if you wanted to address ports greater than 256 to have 16 bit I/O addressability on the bus.  The good news is it is easy to modify the Z80 Series-II CPU board such that the upper I/O address lines are zero. In other words the I/O address range is 0000H to 00FFH.

To accomplish this cut the board traces of pins 6 & 10 of U19 and pins 6& 10 of U20 (both 74LS157's). 
Jumper with a wire all 4 chip pins to ground.

You are done. Now anytime you output to an S100 port with the Z80 the upper address lines will be zero. This avoids messing up ports that say an 8086 would adders.

Modifying the Board Clock Signal.
If you find yourself changing the main S-100 clock frequency on the board a lot as you experiment with other S100 boards (e.g. a slave CPU board) it is nice to be able to do this quickly.  I removed the older clock circuitry on the board utilizing U14 (a 74LS124) and a 8MHZ crystal) and put in place a self contained clock oscillator generator "chip".  These are very common now and provide rock solid stable square wave outputs. They have only 4 pins, (ground, +5V and output). To accomplish this..

Remove U14, cut all traces to pins 1,7,and 10. Jumper pin 10 to pin 9 (ground) and connect pin 7  (frequency output) to the trace going to jumper JG pin B.
Remove the crystal its no longer needed.  Then insert the clock oscillator in the top section of socket U14 (i.e. a 14 pin IC in a 16 pin socket, so pins 8 & 9 are free).

You are done. Now to switch frequencies simply plug in the appropriate frequency generator.  I normally start with a 4MHZ system.
The picture below shows my system.

Frequency Generator

Note if you run this board at anything other than 4MHZ you need to bend out pin 7 of U37 which supplies the bus standard 2MHZ clock signal used by a few older S-100 serial I/O boards.  As we shall see when I get to my front panel board I generate the 2MHZ signal on that board.

Intersystems provided the ability to generate S-100 adders "Full Latched" and "Partial Latched" address lines.  The former were S-100 signals exactly as defined in the IEEE-696 specs., where the bus address lines are stable from early in BS1 to BS3 (i.e. .over the total range). In the partial latch mode the address lines don't quite make it through all of BS3.  However the latter case allows the board to get to higher speeds.  With all boards I have used I have found the partial latch mode to work fine.  For those interested here are the timing diagrams.
IZ Z80 Latch Modes
Here is a logic probe tarce of my board. I put 76H in RAM at 0H and jump to that location. This puts the Z80 into a HALT state. You can see that the pDBIN strobe is nicely going from high to low while the address lines are stable.

Logic Diagram HLT ot 0H

Next to, look at I/O signals. I put into RAM at 0H:-
DB 00 C3 00 00

This will input from port 0H continously.  Here is the corrosponding S-100 signal analysis.

Logic analysis of I/O signals

Again you can see that the pDBIN goes from high to low well before the address lines change.  The same data can be seen for memory and port writes.


This Z80 board also has a great interrupt controller chip, a AMD 9519. This chip when combined with the Z80 provides an enormous amount of flexibility in handling S-100 interrupts. It's ideally setup for multi-user situations. Its a little complex to setup but the manual supplies all you need to know with good examples. However if you use a multiprocessor S-100 system you are better off having the interrupt controller on another board. I only use interrupts in my 16 bit systems so I do not utilize it with this board.  Also the chip runs hot! You can almost fry eggs on it! Normally I remove the chip from the board.

Other pages describing my S-100 hardware and software.
Please click here to continue...

This page was last modified on 01/08/2011